
/*
 * File:   FollowSuperState.h
 * Author: Mohan
 *
 * Created on 11 juillet 2012, 17:58
 */

#ifndef FOLLOWSUPERSTATE_H
#define	FOLLOWSUPERSTATE_H
#include "typesFollow.h"

class FollowSuperState {
public:
    typedef FollowState state_t;
    typedef FollowObservation obs_t;
    typedef FollowAction action_t;
    FollowSuperState();
    FollowSuperState(const FollowSuperState& s2);
    FollowSuperState(const state_t& state, int NA1, int N1, int E1, int S1, int W1,
			 	 	 	 	 	 	 	   int NA2, int N2, int E2, int S2, int W2);
    FollowSuperState(const state_t& state);
    virtual ~FollowSuperState();
    int stateToIndex(const state_t::States& s);
    //Overload comparison to be used in a belief
    bool operator<(FollowSuperState const &s2) const;
    state_t getState() const;
    FollowSuperState update(int a, int ss, int z) const;
    double getT(int s, int a, int ss) const;
    double getO(int s, int a, int z) const;

private:
    state_t m_state;
    int m_countTransitions[state_t::size][action_t::size][obs_t::size];
};

#endif	/* FOLLOWSUPERSTATE_H */

